#ifndef APP_H
#define APP_H

// ###########################################################################################################################################
// MODELO DO RECURSOS DE HARDAWARES
#define MODEL			"hr01"
#define FIRMWARE_VERSION "1.0"
#define PROGAM_NAME "examples " MODEL " firmware v" FIRMWARE_VERSION " [compiled in " __DATE__ " " __TIME__ "]" CMD_TERMINATOR


// ###########################################################################################################################################
// INCLUDES OBRIGATÓRIAS
#include "_config_cpu_.h"
#include "stdio_uc.h"
#include "systick.h"
#include "delay.h"
#include "led_error.h"
#include "beep.h"
#include "gkey.h"
#include "liquid_crystal.h"

#include "ssp1.h"
#include "ili9341.h"
#include "gfx.h"


// ###########################################################################################################################################
// RELAYS
typedef struct {
	int st; // estado dp rele
	volatile uint timeout; // contagem de tempo em ms para voltar ao estado anterior do rele
} tRelay, *pRelay;

// ###############################################################################
// CONTROL
typedef struct {
	volatile uint ticks;
	volatile char key;	// Valor do teclado pressionado
	tRelay relay1;
	tRelay relay2;
} tControl, *pControl;
tControl control;

void relay_Init(void);
void relay_Tick(void);
int relay_Set(int rly, int st, uint timeout);

void onKeyDown(char key);
void onKeyPress(char key);
void onKeyUp(char key);

void app_Init(void);
void app_Tick(void);
void app_Process(void);

void prompt_Process(void);

#endif
